package E_2024;

import java.util.Arrays;

/*
题目描述
    图像有n个像素点，存储在一个长度为n的数组img里，每个像素点的取值范围[0,255]的正整数。
    请你给图像每个像素点值加上一个整数k(可以是负数)，得到新图newlmg，
    使得新图newlmg的所有像素平均值最接近中位值128。
    请输出这个整数k。
输入描述
    n个整数，中间用空格分开
输出描述
    一个整数k
备注
    1<=n<=100
    如有多个整数k都满足，输出小的那个k;
    新图的像素值会自动截取到[0,255]范围。当新像素值<0，其值会更改为0，当新像素值>255，
    其值会更改为255:例如newlmg=”-1 -2 256”,会自动更改为”0 0 255"
 */
public class E_100_58 {
    public static void main(String[] args) {
        System.out.println(ans(new int[]{0,0,0,0}));
        System.out.println(ans(new int[]{129,130,129,130}));
        // 由于数组内最小为0，最大为255，需要处理过界数据
        System.out.println(ans(new int[]{0,255,255,255}));
        System.out.println(ans(new int[]{0,0,0,0,200}));
    }
    // 直接暴力求解
    public static int ans(int[] arr){
        int i = -127;
        int ans = 0;
        int abs = 255;
        int temp = 128 * arr.length;
        while(i < 129){
            int sum = 0;
            for (int num : arr) {
                if (num > i)
                    sum += Math.max(0, num+i);
                else
                    sum += Math.min(255, num+i);
            }
            if (abs > Math.abs(temp - sum)){
                ans = i;
                abs = Math.abs(temp - sum);
            }
            i++;
        }
        return ans;
    }
    public static int ans1(int[] arr){
        int sum = 0;
        for (int i : arr) {
            sum+=i;
        }
        int x = 128 * arr.length - sum;
        int ans = Math.floorDiv(x, arr.length);
        if (ans >= 0) {
            while(ans < 127){
                int sumb = 0;
                for (int i : arr) {

                }
                ans++;
            }
            return ans;
        }
        while(ans > -127){
            int sumb = 0;
            for (int i : arr) {

            }
            ans--;
        }
        return ans;
    }
}
